// 定义日期格式化选项的接口
interface DateFormatOptions {
    "M+": number; // 月份
    "d+": number; // 日
    "h+": number; // 小时
    "m+": number; // 分钟
    "s+": number; // 秒
    "q+": number; // 季度
    "S": number;  // 毫秒
}

/**
 * 格式化日期
 * @param date 要格式化的日期对象或日期字符串
 * @param fmt 格式字符串，例如 "yyyy-MM-dd hh:mm:ss"
 * @returns 格式化后的日期字符串
 */
export function formatDate(date: Date | string, fmt: string): string {
    try {
        date = new Date(date);
        // 如果日期无效，返回 'Invalid Date'
        if (isNaN(date.getTime())) return 'Invalid Date';
    } catch (e) {
        // 捕获错误，默认为当前日期
        date = new Date();
    }

    // 创建格式化选项映射
    const o: DateFormatOptions = {
        "M+": date.getMonth() + 1,                    // 月份
        "d+": date.getDate(),                         // 日
        "h+": date.getHours(),                        // 小时
        "m+": date.getMinutes(),                      // 分钟
        "s+": date.getSeconds(),                      // 秒
        "q+": Math.floor((date.getMonth() + 3) / 3),  // 季度
        "S": date.getMilliseconds()                   // 毫秒
    };

    // 处理年份 (y+)
    if (/(y+)/.test(fmt)) {
        // 将匹配到的年份部分替换为实际年份
        fmt = fmt.replace(RegExp.$1, date.getFullYear().toString().slice(4 - RegExp.$1.length));
    }

    // 处理其他日期格式部分
    for (const k in o) {
        if (new RegExp(`(${k})`).test(fmt)) {
            // 获取当前匹配的格式符，替换为对应值
            const value = o[k as keyof DateFormatOptions].toString();
            fmt = fmt.replace(RegExp.$1, RegExp.$1.length === 1 ? value : value.padStart(2, '0'));
        }
    }

    return fmt;
}


export   function getUnixToDate(unixTime:number)
    {
        let date = new Date(unixTime);
        return formatDate(date , 'yyyy年MM月dd日');
    }

export   function getUnixToTime(unixTime:number)
{
    let date = new Date(unixTime);
    return formatDate(date , 'hh:mm');
}

export function handleDate(unixTime:number)
{
    let date = new Date(unixTime);
    let date1 = new Date(Date.now());
    return (formatDate(date , 'yyyyMMdd') === formatDate(date1 , 'yyyyMMdd') )?
    getUnixToTime(unixTime):getUnixToDate(unixTime);
}

export function dateStringToTimestamp(dateString: string): number {
    // 创建一个Date对象
    const date = new Date(dateString);

    // 获取时间戳（毫秒）
    const timestamp = date.getTime();

    return timestamp;
}
